iT邦幫忙

2024 iThome 鐵人賽

DAY 8
0

簡介

Web Application 會接收使用者的 Request,並透過 Response 來回應使用者。這些請求與回應通常是以 JSON 格式傳遞。以更新商品資訊為例,Request JSON 會包含新的商品名稱與價格,而 Response JSON 則會提供更新後的商品資訊。

Web Application 有責任驗證 Request JSON 和 Response JSON 資料的正確性。如果缺乏驗證步驟,資料可能會被錯誤地更新,或是回傳不完整的資訊給使用者。資料驗證的內容通常包括確認資料是否缺漏,以及數值是否合理。例如,Web Application 需檢查 Request JSON 是否包含商品名稱與價格,並確認價格是正數。對於 Response JSON 也是如此,需檢查其是否正確包含商品名稱與價格。

在之前介紹的 Django 和 Flask 套件中,它們各自擁有主流的資料驗證方式。本篇文章將介紹另一個功能強大的資料驗證套件:Pydantic。值得一提的是,下一篇介紹的 FastAPI 套件,這個後起之秀正是依賴 Pydantic 來驗證 Request JSON 和 Response JSON。接下來,我將透過範例進行詳細說明。

範例

本次範例使用的是 Pydantic 2.8.2 版本

poetry add pydantic==2.8.2

本文同樣以商品為範例。首先,開發者需要定義 Product 類別及其屬性。由於屬性型別的宣告文法採用 Python 3.5 推出的型別註釋,因此開發者可以輕鬆上手。第一個屬性 name 代表商品名稱,其型別為字串;第二個屬性 price 代表商品價格,其型別為正數。當資料通過驗證後,就會成功建立物件。

from pydantic import BaseModel, PositiveInt

class Product(BaseModel):
    name: str
    price: PositiveInt


product = Product(name='demo_product', price=100)
print(f"name: {product.name}")
print(f"price: {product.price}")

https://ithelp.ithome.com.tw/upload/images/20240921/201686633Mj0XG6hV8.png

反之,當資料驗證失敗時,Pydantic 會拋出例外,並提供詳細的錯誤訊息,以幫助開發者進行後續的錯誤處理。

product = Product(name='demo_product', price=-2)

https://ithelp.ithome.com.tw/upload/images/20240921/201686633bORNWQLJH.png

最後,開發者可以將通過資料驗證的物件轉換成 JSON,以便回傳給使用者作為 Response。

product = Product(name='demo_product', price=100)
print(f"JSON: {product.model_dump_json()}")

https://ithelp.ithome.com.tw/upload/images/20240921/201686630yFOOn9HSH.png


上一篇
[Day 07] SQLAlchemy
下一篇
[Day 09] FastAPI
系列文
Python 不止於數據,開發應用程式它也在行!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言